home *** CD-ROM | disk | FTP | other *** search
- program SortsT1; { Turbo Pascal 5.0, 5.5 }
- {$S-,R-}
-
- { Test program for Sorts unit to show the ascending/descending sorts and sort
- times with the QSort procedure. }
-
- uses Sorts;
-
- type
- ArrayType = array[0..32759] of integer; {must start with 0}
-
- var
- Time : longint absolute $0040:$006C; {1 count = 55.9 Msec}
- Tick1 : longint;
- L1 : ^ArrayType; {pointer to array}
- I : integer;
- LstLen,Repeats,RanLimit,WriteLen : integer;
- ElTime : real;
-
- {$F+} function Comp1(var X1,X2) : boolean; {compare for sort ascending}
- begin
- if integer(X1) < integer(X2) then Comp1 := true else Comp1 := false;
- end; {$F-}
-
- {$F+} function Comp2(var X1,X2) : boolean; {compare for sort decending}
- begin
- if integer(X1) > integer(X2) then Comp2 := true else Comp2 := false;
- end; {$F-}
-
- procedure GenerateList;
- var
- J : integer;
- begin
- RandSeed := 1;
- for J := 0 to LstLen-1 do L1^[J] := Random(RanLimit)
- end;
-
- procedure WriteList(SortType : string; Mode : byte);
- var
- I : integer;
- begin
- ElTime := (Time - Tick1) * 55.9;
- if LstLen > WriteLen then
- begin
- case Mode of
- 0 : Writeln(SortType,' 1st and last ',WriteLen,' items:');
- 1 : Writeln(SortType,ElTime:1:1,' MSec, 1st and ',
- 'last ',WriteLen,' items:');
- end;
- for I := 0 to WriteLen-1 do Write(L1^[I],' ');
- Writeln;
- for I := LstLen - WriteLen to LstLen-1 do Write(L1^[I],' ');
- Writeln;
- end
- else
- begin
- case Mode of
- 0 : Writeln(SortType,' ',LstLen,' item(s):');
- 1 : Writeln(SortType,ElTime:1:1,' MSec, ',LstLen,' item(s):');
- end;
- for I := 0 to LstLen-1 do Write(L1^[I],' ');
- Writeln;
- end;
- end;
-
- begin
- WriteLen := 15; {number of items to write to display}
- RanLimit := 10000;
- New(L1);
- repeat
- Write(#13,#10,'Enter list size (1-32759) or 0 to quit: ');
- Readln(LstLen);
- if (LstLen <= 0) or (LstLen > 32759) then Exit;
- Write('Enter list repeats (1-3000) or 0 to quit: ');
- ReadLn(Repeats);
- if (Repeats <= 0) or (Repeats > 3000) then Exit;
- Writeln('Sorting random integers in range 1 - ',RanLimit,' in list of ',
- LstLen,' items ',Repeats,' time(s).');
- GenerateList;
- WriteList('Unsorted: ',0);
- Tick1 := Time;
- for I := 1 to Repeats do
- begin
- GenerateList;
- QSort(L1,0,LstLen-1,SizeOf(integer),Comp1);
- end;
- WriteList('Sort Ascending: ',1);
- Tick1 := Time;
- for I := 1 to Repeats do
- begin
- GenerateList;
- QSort(L1,0,LstLen-1,SizeOf(integer),Comp2);
- end;
- WriteList('Sort Descending: ',1);
- until false;
- Dispose(L1);
- end.